Кажется, что std::move здесь «ускоряет» возврат. Но это зло. На самом деле, компилятор и без std::move применяет Return Value Optimization (RVO) и возвращает s без копирования. А вот std::moveломает RVO — теперь вызывается перемещающий конструктор, и компилятор не может это оптимизировать.
Результат:
* return s; — возможно, вообще без затрат (RVO). * return std::move(s); — гарантированно перемещение (дороже, чем RVO).
🔑Правило: никогда не пиши std::move при возврате локальной переменной по значению. Доверься компилятору.
Когда std::move действительно нужен? Например:
void bar(std::string&& s) { auto local = std::move(s); // перемещаем из rvalue-ссылки }
Здесь всё логично: мы явно говорим, что хотим «украсть» содержимое.
Вывод:std::move — это не перемещение, а обещание, что объект можно обобрать. А перемещать будет уже компилятор.
Кажется, что std::move здесь «ускоряет» возврат. Но это зло. На самом деле, компилятор и без std::move применяет Return Value Optimization (RVO) и возвращает s без копирования. А вот std::moveломает RVO — теперь вызывается перемещающий конструктор, и компилятор не может это оптимизировать.
Результат:
* return s; — возможно, вообще без затрат (RVO). * return std::move(s); — гарантированно перемещение (дороже, чем RVO).
🔑Правило: никогда не пиши std::move при возврате локальной переменной по значению. Доверься компилятору.
Когда std::move действительно нужен? Например:
void bar(std::string&& s) { auto local = std::move(s); // перемещаем из rvalue-ссылки }
Здесь всё логично: мы явно говорим, что хотим «украсть» содержимое.
Вывод:std::move — это не перемещение, а обещание, что объект можно обобрать. А перемещать будет уже компилятор.
Telegram is riding high, adding tens of million of users this year. Now the bill is coming due.Telegram is one of the few significant social-media challengers to Facebook Inc., FB -1.90% on a trajectory toward one billion users active each month by the end of 2022, up from roughly 550 million today.
Among the actives, Ascendas REIT sank 0.64 percent, while CapitaLand Integrated Commercial Trust plummeted 1.42 percent, City Developments plunged 1.12 percent, Dairy Farm International tumbled 0.86 percent, DBS Group skidded 0.68 percent, Genting Singapore retreated 0.67 percent, Hongkong Land climbed 1.30 percent, Mapletree Commercial Trust lost 0.47 percent, Mapletree Logistics Trust tanked 0.95 percent, Oversea-Chinese Banking Corporation dropped 0.61 percent, SATS rose 0.24 percent, SembCorp Industries shed 0.54 percent, Singapore Airlines surrendered 0.79 percent, Singapore Exchange slid 0.30 percent, Singapore Press Holdings declined 1.03 percent, Singapore Technologies Engineering dipped 0.26 percent, SingTel advanced 0.81 percent, United Overseas Bank fell 0.39 percent, Wilmar International eased 0.24 percent, Yangzijiang Shipbuilding jumped 1.42 percent and Keppel Corp, Thai Beverage, CapitaLand and Comfort DelGro were unchanged.